#region Copyright (c) 2003, newtelligence AG. All rights reserved.
/*
// Copyright (c) 2003, newtelligence AG. (http://www.newtelligence.com)
// Original BlogX Source Code: Copyright (c) 2003, Chris Anderson (http://simplegeek.com)
// All rights reserved.
//  
// Redistribution and use in source and binary forms, with or without modification, are permitted 
// provided that the following conditions are met: 
//  
// (1) Redistributions of source code must retain the above copyright notice, this list of 
// conditions and the following disclaimer. 
// (2) Redistributions in binary form must reproduce the above copyright notice, this list of 
// conditions and the following disclaimer in the documentation and/or other materials 
// provided with the distribution. 
// (3) Neither the name of the newtelligence AG nor the names of its contributors may be used 
// to endorse or promote products derived from this software without specific prior 
// written permission.
//      
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS 
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 
// AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 
// IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 
// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// -------------------------------------------------------------------------
//
// Original BlogX source code (c) 2003 by Chris Anderson (http://simplegeek.com)
// 
// newtelligence is a registered trademark of newtelligence Aktiengesellschaft.
// 
// For portions of this software, the some additional copyright notices may apply 
// which can either be found in the license.txt file included in the source distribution
// or following this notice. 
//
*/
#endregion

using System;
using System.Collections;

namespace newtelligence.DasBlog.Runtime
{
    /// <summary>
    /// A collection of elements of type DayExtra
    /// </summary>
    
    public class DayExtraCollection: System.Collections.CollectionBase
    {
        /// <summary>
        /// Initializes a new empty instance of the DayExtraCollection class.
        /// </summary>
        public DayExtraCollection()
        {
            // empty
        }

        /// <summary>
        /// Initializes a new instance of the DayExtraCollection class, containing elements
        /// copied from an array.
        /// </summary>
        /// <param name="items">
        /// The array whose elements are to be added to the new DayExtraCollection.
        /// </param>
        public DayExtraCollection(DayExtra[] items)
        {
            this.AddRange(items);
        }

        /// <summary>
        /// Initializes a new instance of the DayExtraCollection class, containing elements
        /// copied from another instance of DayExtraCollection
        /// </summary>
        /// <param name="items">
        /// The DayExtraCollection whose elements are to be added to the new DayExtraCollection.
        /// </param>
        public DayExtraCollection(DayExtraCollection items)
        {
            this.AddRange(items);
        }

        /// <summary>
        /// Adds the elements of an array to the end of this DayExtraCollection.
        /// </summary>
        /// <param name="items">
        /// The array whose elements are to be added to the end of this DayExtraCollection.
        /// </param>
        public virtual void AddRange(DayExtra[] items)
        {
            foreach (DayExtra item in items)
            {
                this.List.Add(item);
            }
        }

        /// <summary>
        /// Adds the elements of another DayExtraCollection to the end of this DayExtraCollection.
        /// </summary>
        /// <param name="items">
        /// The DayExtraCollection whose elements are to be added to the end of this DayExtraCollection.
        /// </param>
        public virtual void AddRange(DayExtraCollection items)
        {
            foreach (DayExtra item in items)
            {
                this.List.Add(item);
            }
        }

        /// <summary>
        /// Adds an instance of type DayExtra to the end of this DayExtraCollection.
        /// </summary>
        /// <param name="value">
        /// The DayExtra to be added to the end of this DayExtraCollection.
        /// </param>
        public virtual void Add(DayExtra value)
        {
            this.List.Add(value);
        }

        /// <summary>
        /// Determines whether a specfic DayExtra value is in this DayExtraCollection.
        /// </summary>
        /// <param name="value">
        /// The DayExtra value to locate in this DayExtraCollection.
        /// </param>
        /// <returns>
        /// true if value is found in this DayExtraCollection;
        /// false otherwise.
        /// </returns>
        public virtual bool Contains(DayExtra value)
        {
            return this.List.Contains(value);
        }

        /// <summary>
        /// Return the zero-based index of the first occurrence of a specific value
        /// in this DayExtraCollection
        /// </summary>
        /// <param name="value">
        /// The DayExtra value to locate in the DayExtraCollection.
        /// </param>
        /// <returns>
        /// The zero-based index of the first occurrence of the _ELEMENT value if found;
        /// -1 otherwise.
        /// </returns>
        public virtual int IndexOf(DayExtra value)
        {
            return this.List.IndexOf(value);
        }

        /// <summary>
        /// Inserts an element into the DayExtraCollection at the specified index
        /// </summary>
        /// <param name="index">
        /// The index at which the DayExtra is to be inserted.
        /// </param>
        /// <param name="value">
        /// The DayExtra to insert.
        /// </param>
        public virtual void Insert(int index, DayExtra value)
        {
            this.List.Insert(index, value);
        }

        /// <summary>
        /// Gets or sets the DayExtra at the given index in this DayExtraCollection.
        /// </summary>
        public virtual DayExtra this[int index]
        {
            get
            {
                return (DayExtra) this.List[index];
            }
            set
            {
                this.List[index] = value;
            }
        }

        /// <summary>
        /// Removes the first occurrence of a specific DayExtra from this DayExtraCollection.
        /// </summary>
        /// <param name="value">
        /// The DayExtra value to remove from this DayExtraCollection.
        /// </param>
        public virtual void Remove(DayExtra value)
        {
            this.List.Remove(value);
        }

        public void Sort()
        {
            this.InnerList.Sort();
        }
        public void Sort(IComparer comparer)
        {
            this.InnerList.Sort(comparer);
        }

        /// <summary>
        /// Type-specific enumeration class, used by DayExtraCollection.GetEnumerator.
        /// </summary>
        public class Enumerator: System.Collections.IEnumerator
        {
            private System.Collections.IEnumerator wrapped;

            /// <summary>
            /// 
            /// </summary>
            /// <param name="collection"></param>
            public Enumerator(DayExtraCollection collection)
            {
                this.wrapped = ((System.Collections.CollectionBase)collection).GetEnumerator();
            }

            /// <summary>
            /// 
            /// </summary>
            public DayExtra Current
            {
                get
                {
                    return (DayExtra) (this.wrapped.Current);
                }
            }

            object System.Collections.IEnumerator.Current
            {
                get
                {
                    return (DayExtra) (this.wrapped.Current);
                }
            }

            public bool MoveNext()
            {
                return this.wrapped.MoveNext();
            }

            public void Reset()
            {
                this.wrapped.Reset();
            }
        }

        /// <summary>
        /// Returns an enumerator that can iterate through the elements of this DayExtraCollection.
        /// </summary>
        /// <returns>
        /// An object that implements System.Collections.IEnumerator.
        /// </returns>        
        public new virtual DayExtraCollection.Enumerator GetEnumerator()
        {
            return new DayExtraCollection.Enumerator(this);
        }
    }
}
